home *** CD-ROM | disk | FTP | other *** search
/ TOS Silver 2000 / TOS Silver 2000.iso / programm / MM2_DEV / S / MYUTIL / WATCHER.M < prev    next >
Encoding:
Text File  |  1990-09-25  |  2.5 KB  |  99 lines

  1. MODULE Monitor;
  2. (*$L-*)
  3.  
  4. FROM Loader IMPORT Monitor;
  5.  
  6. FROM ModCtrl IMPORT InstallModule, ReleaseModule, FirstModuleStart;
  7.  
  8. FROM MOSGlobals IMPORT MemArea;
  9.  
  10. FROM SYSTEM IMPORT ASSEMBLER;
  11.  
  12. VAR oldV: PROC;
  13.     wsp: MemArea;
  14.  
  15.  
  16. CONST   RegD0 = 04;
  17.         RegD1 = 08;
  18.         RegD2 = 12;
  19.         RegD3 = 16;
  20.         RegD4 = 20;
  21.         RegD5 = 24;
  22.         RegD6 = 28;
  23.         RegD7 = 32;
  24.         RegA0 = 36;
  25.         RegA1 = 40;
  26.         RegA2 = 44;
  27.         RegA3 = 48;
  28.         RegA4 = 52;
  29.         RegA5 = 56;
  30.         RegA6 = 60;
  31.         RegA7 = 64;
  32.         RegSR = 02;
  33.         RegPC = 68;
  34.         RegUSP = 72;
  35.         RegSSP = 76;
  36.         RegBEV = 80;
  37.         RegAEV = 84;
  38.  
  39. PROCEDURE trc;
  40.   BEGIN
  41.     ASSEMBLER
  42.         ; Diese Routine wird von TEMPLEMON regelmäßig im Trace-Modus
  43.         ; aufgerufen.
  44.         ; In A0 erhält sie einen Zeiger auf die - geretteten - CPU-
  45.         ; Register. Die obigen Konstanten können benutzt werden, um
  46.         ; auf sie zuzugreifen.
  47.         ; In D0.B muß die Routine einen Wert ungleich Null liefern, wenn
  48.         ; der Trace-Modus unterbrochen werden soll.
  49.  
  50.         CMPI.L  #$3BAA,$501C4
  51.         SNE     D0
  52.     END
  53.   END trc;
  54.  
  55. PROCEDURE mon;
  56.   BEGIN
  57.     ASSEMBLER
  58.         ; Diese Routine wird beim Start eines Moduls aufgerufen.
  59.         ;
  60.         ; Man gelangt dann in den TEMPLEMON, der natürlich installiert
  61.         ; sein muß, wo mit "BU RD0" der User-Trace-Vektor auf die
  62.         ; Funktion 'trc' (oben) gesetzt werden kann.
  63.         ; Dann kann mit "T+" der Trace-Modus aktiviert und mit "G" und
  64.         ; der Taste /A/ das Programm im Trace-Modus gestartet werden.
  65.         ; (Näheres siehe TEMPLEMON-Dokumentation)
  66.         ;
  67.         ; Natürlich kann auch auf die obige User-Trace-Routine verzichtet
  68.         ; werden und stattdessen z.B. das geladene Programm disassmbliert
  69.         ; werden.
  70.  
  71.         MOVE.L    #trc,D0
  72.         BREAK
  73.     END
  74.   END mon;
  75.  
  76. PROCEDURE restore;
  77.   BEGIN
  78.     Monitor:= oldV
  79.   END restore;
  80.  
  81. BEGIN
  82.   IF FirstModuleStart () THEN
  83.     (*
  84.      * Die Prozedur 'mon' wird so installiert, daß sie bei jedem folgenden
  85.      * Start eines Moduls (über den Loader) aufgerufen wird.
  86.      *)
  87.     oldV:= Monitor;              (* alten Vektor retten *)
  88.     Monitor:= mon;               (* Routine 'mon' installieren *)
  89.     wsp.bottom:= NIL;
  90.     InstallModule (restore,wsp)  (* Dieses Modul resident machen *)
  91.   ELSE
  92.     (*
  93.      * Beim zweiten Start dieses Programms wird wieder alles abgemeldet.
  94.      *)
  95.     restore;
  96.     ReleaseModule
  97.   END
  98. END Monitor.
  99.